#include "main.h"

int ListInitiate(SLNode **head) {
    (*head) = (SLNode *) malloc(sizeof(SLNode));
    if(!*head){
        return 1;
    }
    (*head)->next = NULL;
    return 0;
}

int ListLength(SLNode *head) {
    int length=0;
    SLNode *p;
    p = head->next;
    while (p){
        length++;
        p= p->next;
    }
    return length;
}

int ListInsert(SLNode *head, int i, DataType x) {
    SLNode *p=head,*s;int j=0;
    while (p && j<i){
        p=p->next;
        j++;
    }
    if (!p ||j>i)return 1;
    s = (SLNode*) malloc(sizeof(SLNode));
    s->data = x;
    s->next = p->next;
    p->next = s;
    return 0;
}

int ListDelete(SLNode *head, int i, DataType *x) {
    SLNode *p = head,*q;
    int j=0;
    while ((p->next)&&(j<i)){
        p = p->next;
        j++;
    }
    if(!(p->next) ||(j>i)){
        return 1;
    }
    q = p->next;
    p->next = q->next;
    *x = q->data;
    free(q);
    return 0;
}

int ListGet(SLNode *head, int i, DataType *x) {
    SLNode *p;int j = 0;
    p = head->next;
    while (p&&j<i)
    {
        p = p->next;
        ++j;
    }
    if(!p || j>i){
        return 1;
    }
    *x = p->data;
    return 0;
}

int Destroy(SLNode **head)
{
    SLNode *p,*q;
    p = (*head)->next;
    if(*head==NULL){
        return 1;
    }
    while (p!=NULL){
        q = p->next;
        free(p);
        p=q;
    }
    (*head)->next =NULL;
    return 0;
}

int main(void) {
    SLNode *head;
    int i , x;
    ListInitiate(&head);/*初始化*/
    for(i = 0; i < 10; i++) {
        if(ListInsert(head, i, i+1) != 0) /*插入10个数据元素*/
        {
            printf("错误! \n");
            return 1;
        }
    }
    if(ListDelete(head, 4, &x) != 0) { /*删除数据元素5*/
        printf("错误! \n");
        return 0;
    }

    for(i = 0; i < ListLength(head); i++) {
        if(ListGet(head, i, &x) != 0) /*取元素*/
        {
            printf("错误!\n");
            return 1;
        }
        else printf("%d\t", x);/*显示数据元素*/
    }
    Destroy(&head);
}